package aimis.dto;

import lombok.Getter;
import lombok.Setter;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.function.Function;
@Getter
@Setter
public class TableList<T> {
    /**
     * 将JPA的Page类型转换为TableList类型
     * @param page
     * @return
     * @param <T>
     */
    public static <T> TableList<T> create(Page<T> page)
    {
        return create(page,(T o)->{
           return o;
        });
    }

    /**
     * 将JPA的Page类型转换为TableList类型，同时将Page中的类型T转换为类型R
     * @param page
     * @param mapper
     * @return
     * @param <R>
     * @param <T>
     */
    public static <R, T> TableList<R> create(Page<T> page, Function<T, R> mapper)
    {
        List<R> list=page.getContent().stream().map(mapper).toList();
        var tableList=new TableList<R>();
        tableList.list=list;
        tableList.totalPages=page.getTotalPages();
        tableList.totalCount=page.getTotalElements();
        tableList.pageSize=page.getSize();
        tableList.pageNum=page.getNumber();
        return tableList;
    }

    /**
     * 每页大小
     */
    private Integer pageSize;
    /**
     * 当前页（从0开始）
     */
    private Integer pageNum;
    /**
     * 总页数
     */
    private Integer totalPages;
    /**
     * 总数据量
     */
    private Long totalCount;
    /**
     * 数据
     */
    private List<T> list;

}
